#include <iostream>
#include "Rational.hpp"

/*
Этот файл главный (в силу особенностей Makefile). В классе небольшой оверинжиниринг. 
Позволяет создавать достаточно большие дроби. Конструктор работает как с unsigned, так и с int.
Можно инициализировать одним числом, двумя и сразу задавать знак перед дробью (+ by default).
Хранит дробь в сокращенном виде. Несколько геттеров и сеттеров. В том числе, можно узнать, 
отрицательная дробь или положительная. Дробь также меняет знак по revert() и переворачивается 
(возводится в степень -1) по invert(). Также сделан вывод через iostream::cout. 

Есть баг, природа которого не ясна: 

Rational C(4, 3); // 4/3
Rational D(1, 3, false); // -1/3
Rational T = C - D;

cout << T << endl; // вернет 5/3
cout << (C - D).numerator() << endl; // вернет число 1
cout << C - D; // выведет 1 (неизвестно, почему). При этом с другими значениями он может вывести double
*/

using namespace std;

int main() {
	Rational A;
	Rational B(1,3); // Эквивалентно Rational T(1,3,true)
	cout << A << " " << B << endl;
	Rational C = A * B;
	cout << C << endl;
	A += C;
	A -= B;
	cout << A << endl;
	++B;
	Rational P = B - A;
	cout << B << endl << P << endl;
	++A;
	cout << A << endl << B << endl;
	cout << double(P) << endl;
	Rational T(-2); // int -2. Эквивалентно Rational T(2,1,false)
	cout << T << endl;
	Rational Q(12, 8, false);
	cout << Q << endl;
	return 0;
}
